package com.thoughtworks.collection;

import sun.reflect.generics.reflectiveObjects.NotImplementedException;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class MyMap {

    List<Integer> array;
    private String[] letters = new String[]{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",
            "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
    private List<String> letterList = Arrays.asList(letters);

    public MyMap(List<Integer> array) {
        this.array = array;
    }

    public List<Integer> getTriple() {
        Stream<Integer> integerStream = array.stream().map(a -> a * 3);
        return integerStream.collect(Collectors.toList());
    }

    public List<String> mapLetter() {
//        List<String> list=new ArrayList<>();
//        array.stream().map()
        Map map=new HashMap();
        List list=new ArrayList();
        for (int i=0;i<letters.length;i++){
            map.put(i+1,letters[i]);
        }
        for (Integer s:array){
            list.add(map.get(s));
        }
        return list;
    }

    public List<String> mapLetters() {
//        Map map=new HashMap();
//        List list=new ArrayList();
//
//        for (int i=0;i<6;i++){
//            if(0<array.get(i)-26&&array.get(i)-26<26){
//                map.put(i+1,letters[array.get(i)/26-1]+letters[array.get(i)-26-1]);
//            }
//            if(array.get(i)%26==0&&array.get(i)>26){
//                map.put(i+1,letters[0]+letters[25]);
//            }
//            if(0<array.get(i)-26*2&&array.get(i)-26*2<26){
//                map.put(i+1,letters[array.get(i)/26-1]+letters[array.get(i)-26*2-1]);
//            }
//            map.put(i+1,letters[i]);
//        }
//        for (Integer s:array){
//            list.add(map.get(s));
//        }
//        return list;
        Map<Integer,String> map=new HashMap();
        List<String> list=new ArrayList();
        for (int i=0;i<letters.length;i++){
            map.put(i+1,letters[i]);
        }
        for (Integer s:array){
            if (s>26 && s%26!=0){
                list.add(map.get(s/26) + map.get(s % 26));
            }else if (s>26 && s%26==0){
                list.add(map.get(s/26-1)+"z");
            }
            else{
                list.add(map.get(s));
            }
        }

        return list;
    }

    public List<Integer> sortFromBig() {
        Stream<Integer> sorted = array.stream().sorted(Comparator.reverseOrder());
        return sorted.collect(Collectors.toList());
    }

    public List<Integer> sortFromSmall() {
        Stream<Integer> sorted = array.stream().sorted();
        return sorted.collect(Collectors.toList());
    }
}
